/**
 * 角色选择系统端到端测试
 * 测试角色选择、解锁和特殊能力功能
 */
describe('角色选择系统测试', () => {
  beforeEach(() => {
    cy.visit('/')
    cy.get('[data-cy="start-game-btn"]').click()
  })

  it('应该显示角色选择界面', () => {
    // 验证角色选择界面
    cy.get('[data-cy="character-select"]').should('be.visible')
    cy.get('[data-cy="character-list"]').should('be.visible')
    
    // 验证默认角色可用
    cy.get('[data-cy="character-default"]').should('be.visible')
    cy.get('[data-cy="character-default"]').should('not.have.class', 'locked')
    
    // 验证角色信息显示
    cy.get('[data-cy="character-default"]').click()
    cy.get('[data-cy="character-info"]').should('be.visible')
    cy.get('[data-cy="character-name"]').should('contain', '默认角色')
    cy.get('[data-cy="character-abilities"]').should('be.visible')
  })

  it('应该能够选择不同的角色', () => {
    // 选择默认角色
    cy.selectCharacter('default')
    cy.waitForGameLoad()
    
    // 验证角色已选择
    cy.window().its('gameStore').then((store) => {
      expect(store.currentCharacter.id).to.equal('default')
    })
    
    // 返回菜单重新选择
    cy.get('body').type('{esc}')
    cy.get('[data-cy="menu-btn"]').click()
    cy.get('[data-cy="start-game-btn"]').click()
    
    // 选择其他角色（如果有解锁的）
    cy.get('[data-cy="character-list"] .character-item').then(($characters) => {
      if ($characters.length > 1) {
        cy.get('[data-cy="character-list"] .character-item').eq(1).click()
        cy.get('[data-cy="confirm-character-btn"]').click()
        cy.waitForGameLoad()
      }
    })
  })

  it('应该显示锁定的角色', () => {
    // 检查是否有锁定的角色
    cy.get('[data-cy="character-list"] .character-item.locked').then(($lockedChars) => {
      if ($lockedChars.length > 0) {
        // 点击锁定的角色
        cy.wrap($lockedChars.first()).click()
        
        // 验证解锁条件显示
        cy.get('[data-cy="unlock-condition"]').should('be.visible')
        cy.get('[data-cy="unlock-requirement"]').should('be.visible')
        
        // 验证无法选择锁定的角色
        cy.get('[data-cy="confirm-character-btn"]').should('be.disabled')
      }
    })
  })

  it('应该显示角色特殊能力', () => {
    // 选择角色并查看能力
    cy.get('[data-cy="character-default"]').click()
    
    // 验证能力信息
    cy.get('[data-cy="character-abilities"]').should('be.visible')
    cy.get('[data-cy="ability-list"]').should('exist')
    
    // 检查能力描述
    cy.get('[data-cy="ability-list"] .ability-item').should('have.length.at.least', 1)
    cy.get('[data-cy="ability-list"] .ability-item').first().within(() => {
      cy.get('.ability-name').should('be.visible')
      cy.get('.ability-description').should('be.visible')
    })
  })

  it('应该能够预览角色动画', () => {
    // 选择角色
    cy.get('[data-cy="character-default"]').click()
    
    // 验证角色预览
    cy.get('[data-cy="character-preview"]').should('be.visible')
    
    // 触发动画预览
    cy.get('[data-cy="preview-animation-btn"]').click()
    
    // 验证动画播放
    cy.get('[data-cy="character-preview"] .character-sprite').should('have.class', 'animating')
    
    // 等待动画完成
    cy.wait(2000)
    cy.get('[data-cy="character-preview"] .character-sprite').should('not.have.class', 'animating')
  })

  it('应该保存角色选择偏好', () => {
    // 选择角色
    cy.selectCharacter('default')
    cy.waitForGameLoad()
    
    // 返回主菜单
    cy.get('body').type('{esc}')
    cy.get('[data-cy="menu-btn"]').click()
    
    // 重新进入角色选择
    cy.get('[data-cy="start-game-btn"]').click()
    
    // 验证上次选择的角色被记住
    cy.get('[data-cy="character-default"]').should('have.class', 'selected')
  })
})